///////////////////////////////////////////////////////////////////////////////
// Projekt: O'n'X
// Autor: Lord Darkstorm
// Data utworzenia: 09.08.2013
// Opis: Klasa reprezentująca zarówno interfejs gry, jak i całą jej obsługę.
///////////////////////////////////////////////////////////////////////////////

#ifndef GAMEINTERFACE_H
#define GAMEINTERFACE_H

#include <QDialog>
#include <QMessageBox>
#include <QTcpSocket>

#include "newgamedialog.h"

namespace Ui
{
  class GameInterface ;
}

class GameInterface : public QDialog
{
  Q_OBJECT
    
  public:
    explicit GameInterface(QWidget *parent, short gameType, bool whoStarts) ;
    explicit GameInterface(QWidget *parent, short gameType, bool whoStarts, int sID) ;
    ~GameInterface() ;
    enum Result
    {
      PlayerWon, // Zwyciężył gracz
      OpponentWon, // Zwyciężył przeciwnik
      Tie // Remis
    } ;
    int result() ; // Metoda zwracająca wynik końcowy gry.

  signals:
    void changedTurn() ;

  public slots:
    void markField1() ;
    void markField2() ;
    void markField3() ;
    void markField4() ;
    void markField5() ;
    void markField6() ;
    void markField7() ;
    void markField8() ;
    void markField9() ;
    void checkIfSomeoneWon() ;
    void updateStatus() ;
    void readData() ;

  private:
    void computerTurn() ; // Metoda reprezentująca turę gracza
    Ui::GameInterface *ui ;
    enum FieldState // Stan pola w planszy
    {
      Unmarked, // Nieoznaczony
      Cross, // Krzyżyk
      Circle // Kółko
    } ;
    short int resultTable[3][3] ; // Tablica przechowująca status pól
    short int resultGame ; // Wynik gry
    short int type ; // Rodzaj gry
    bool playerTurn ; // Pole informujące o turze
    bool playerWon ; // Pole informujące o tym, czy gracz wygrał
    bool tie ; // Pole informujące o tym, czy jest remis
    QTcpSocket *socket ;
} ;

#endif
